package entrega;

import java.io.*;

/**
 * Programa en el que se introduce el salario y nombre de cada trabajador Se
 * visualizará el trabajador con mejor sueldo y el salario medio, así como el
 * número de empleados perteneciente a cada categoría salarial(hastac1000, hasta
 * 2000, >2000), el porcentaje de dicha catergoria respecto al total El programa
 * finaliza al intoducir un * Autor:Fernando Ortega Gonzalez
 */
public class ejer4 {//class ejer4

    public static void main(String[] args) throws IOException {//main
        String trabajador, mejorpagado = null;
        int sueldo = 0, mayor = 0;
        int mil = 0, dosmil = 0, xmil = 0, operarios = 0, total = 0;
        float media, porcentajemil, porcentajedosmil, porcentajexmil;
        boolean asterisco = false, mal = true;
        trabajador = pedirNombre("Introduzca su nombre\t");
        if (trabajador.equals("*")) {
            asterisco = true; //He metido un asterísco la primera vez
        } else {//Si no es un asterisco la primera vez
            while (!trabajador.equals("*")) {  //mientras no sea asterisco
                while (trabajador.equals("")) {//mientras no meta un nombre vacio
                    trabajador = pedirNombre("Ha introducido un nombre vacio, introduzca un nombre válido\t");
                }//mientras no meta un nombre vacio

                sueldo = pedirSueldo("Introduzca su sueldo\t", mal);
                operarios++;
                total = total + sueldo;
                if (sueldo < 1001) {//sueldo<1001
                    mil++;
                }//sueldo<1001
                else {//sueldo>1000
                    if (sueldo < 2001) {//sueldo 1001-2000
                        dosmil++;
                    }//sueldo 1001-2000
                    else {//sueldo>2000
                        xmil++;
                    }//sueldo>2000
                }//sueldo>1000
                if (sueldo > mayor) {//Comprueba si el empleado actual es el mejor pagado
                    mayor = sueldo;
                    mejorpagado = trabajador;
                }//Comprueba si el empleado actual es el mejor pagado
                trabajador = pedirNombre("Introduzca su nombre\t");
            }//mientras no sea asterisco
        }//Si no es un asterisco la primera vez

        if (asterisco) {//si la primera vez es un asterisco
            System.out.println("No hay datos");
        }//si la primera vez es un asterisco
        else {//si la primera vez no es un asterisco
            media = (float)total / operarios;
            porcentajemil = ((float)mil * 100 / operarios);
            porcentajedosmil = ((float)dosmil * 100 / operarios);
            porcentajexmil = ((float)xmil * 100 / operarios);
            System.out.println("El trabajador con mayor sueldo es:\t" + mejorpagado);
            System.out.println("El sueldo medio es:\t" + media);
            System.out.println("El sueldo total es:\t" + total);
            System.out.println("TRABAJADORES CON SUELDO\t\tTOTAL\t\tPORCENTAJE");
            System.out.println("Hasta 1000\t\t\t" + mil + "\t\t" + porcentajemil);
            System.out.println("Hasta 2000\t\t\t" + dosmil + "\t\t" + porcentajedosmil);
            System.out.println("Más de 2000\t\t\t" + xmil + "\t\t" + porcentajexmil);
        }//si la primera no vez es un asterisco
    }

    /**
     * Metodo que recibe un mensaje y devuelve un número entero
     *
     * @param mensaje
     * @param mal
     * @return cantidad
     * @throws IOException
     */
    public static int pedirSueldo(String mensaje, boolean mal) throws IOException {//Método pedirSueldo
        int cantidad = 0;
        InputStreamReader flujo = new InputStreamReader(System.in);
        BufferedReader teclado = new BufferedReader(flujo);
        while (mal) {
            try {//Si meto un número
                System.out.println(mensaje);//MENSAJE PASADO DESDE nota
                cantidad = Integer.parseInt(teclado.readLine());
                if (cantidad < 1) {//entre 0 y 10
                    System.out.print("Introduczca un sueldo positivo\n");
                }//entre 0 y 10
                else {
                    mal = false;
                }
            }//Si meto un número
            catch (NumberFormatException ex) {//controla que introduzca letras y no números
                System.out.println("No has introducido un número");
            }//controla que introduzca letras y no números
        }
        return cantidad;//DEVUELVE EL NUMERO
    } //Método pedirSueldo

    /**
     * Metodo que recibe un mensaje y devuelve una cadena de caracteres
     *
     * @param mensaje
     * @return nombre
     * @throws IOException
     */
    public static String pedirNombre(String mensaje) throws IOException {//Método pedirNombre
        String nombre;
        InputStreamReader flujo = new InputStreamReader(System.in);
        BufferedReader teclado = new BufferedReader(flujo);
        System.out.println(mensaje);
        nombre = (teclado.readLine());
        return nombre;
    }//Método pedirNombre
}
